23

» WarCraft 3 / Вопрос по циклам

Похожие вопросы:

ответ
SetUnitPosition довольно тяжелая операци, юзайте SetUnitX\Y в конце полета юзай SetUnitPosition для того чтобы юнит не залетел в непроходимое место.
Фильтр просто ужас, ну кто так фильтры делает?
Проверка на 'Aloc', я в ужасе на кой черт проверять на дамми если GropEnumUnitsInRange\Rect не выделяет москитов, тока EnumOfPlayer может пикнуть москитов, остальное не пикает их, на то они и москиты...
Вот как выглядит нормальный фильтр без локалок и прочего
function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction
UnitDamageTargetEx - красиво но нафиг ненужно обводить в отдельную функцию с тучей аргументов + жутко неудобно, 100500 аргументов у функции и фиг знает за что какой от вечает, прямо так UnitDamageTarget, без отдельной функции.
Туча констант, тоже хорошо тока длят наработок, на деле ставь конкретные значения или юзай Difine vjass'a.
ответ
~16GB:
ты что делаешь новые функции для гуи? если да, то нафига?
ответ
Используй следующую конструкцию:
globals
   unit enumUnit
   group filterGroup
endglobals

loop
   set enumUnit = FirstOfGroup(filterGroup)
exitwhen enumUnit == null
   call UnitDamageTarget(arguments)
   call GroupRemoveUnit(filterGroup,enumUnit)
endloop

23

» WarCraft 3 / Цвет текста предмета

Похожие вопросы:

ответ
Обсуждалось 100500 раз, 1 символ кириллицы считается за 2 символа латиницы.
Пишем вместо Пepeзаpядкa Пepeзаpядкa (выигрыш 5 символов) , описание предмета у героя в инвентаре очень очень короткое, буквально 4 строчки.
рус символы
eng

23

» WarCraft 3 / Как вставить изображение?

Принятый ответ
Похожие вопросы:

ответ
~8gabriel8:
Надо под загруженной картинкой нажать "Вставить ссылку на файл".

23

» WarCraft 3 / Доступность способности

Похожие вопросы:

ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
Добавить в требование способностей наличие у игрока нормального героя (не морфнутого) или дамми юнита, которого нужно будет создавать или удалять.
ответ
Ты смотрел внимательно телескоп гоблинов и поставку ресурсов? Проверка каста этих способностей ведется по событию - золото игрока изменилось
ответ
RotceV,
юнит приобретает способность
приобретённая способность == Абилка А
modify hero skills point trggering unit substract 1 point
ответ
Задать рандомное число (напр: set YourNumber =random integer number between 1 and 5) и кастовать в зависимости от того что выпало

23

» WarCraft 3 / String Hash

Похожие вопросы:

ответ
Существует лимит то ли на кол-во операций, то ли на время выполнения, то ли и на то и на другое. При превышении лимита поток молча рубится.
В качестве шаманства: попробуй завернуть каждый цикл в отдельную функцию. Врядли это поможет само по себе, но зато потом проще будет переходить к следующему шагу - разнесению на отдельные потоки.
ответ
Всё, разобрался, вопрос снимаю)
ответ
Проблема возникает также при переносе вот этого вот в инициализацию триггера тест.
Но при этом если вместо строки вроде "12345" использовать, например, GetAbilityName('Aloc') - то все работает.
Это какой-то баг со строками?
Еще у меня почему-то происходит фантомный клик по центру карты в начале игры
Вобщем не стоит юзать имена функций напрямую в экзекуте и вообще таймеры лучше

23

» WarCraft 3 / Урон от способности

Похожие вопросы:

ответ
Понятно. Но в твоем случае сделать это можно только триггерно.
ответ
юнит получает урон
1 ответ на 2 вопроса
ответ
Очень-очень трудоемко. Было таких вопросов миллион. Тривиальный ответ: БД
ответ
Ghostly, используй настройки, как у Паладина в карте: xgm.guru/files/100/184321/comments/344569/Hero.w3x
ответ
у меня лично работает все проверил с твоими параметрами.

23

» WarCraft 3 / графика способности

Похожие вопросы:

ответ
Кароче. Объясняю в чём дело.
Способность "Техника" имеет прикреплённые к ней спецэффекты шипов через одноимённое заклинание (тоже "Техника").
Почему шипы видны только на "больших героях"? - потому что у них есть особые точки крепления аттачей, маунт-справа/слева (на подобии нога-левая, рука-правая).
Как убрать? - логика подсказывает что нужно зачистить соответствующие поля в эффекте "Техника", что собственно и верно... и нет...
Дело в том что скилл "Техника" относится к тем, которые имеют ошибку с изменением графических параметров в РО. (меняешь, а оно всё равно по старому отображается - например тёмная стая, стадо ящерец).
Что же делать? - берёшь стандартную технику, смотришь её стандартный эффект. Удаляешь из стандартного эффекта всю графику (теперь техника не будет давать шипы). Копируешь стандартную технику - вот твой новый скилл который уже не будет давать шипов. Готово. Работаешь с новой копией.
ответ
Нужна особая анимация, смотри внимательно анимации гулей и мясников, там вроде spell channel, у волков нету такой анимации, так что либо кастом проигрывай анимацию атаки либо делай свою модель волка с нужными анимациями, на основе стандартной.
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
~16GB:
0.06 время жизни слишком мало ставь хотя бы 0.3
ответ
Закрыто.

23

» WarCraft 3 / Как сделать Способность по области.

Похожие вопросы:

ответ
Лови карту.
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Кину наработку, в триггерах разбираешься?
ЛПХОХЫОПЫ, сделано. Как делается. можно посмотреть в триггерах.
ответ
Рунные браслеты давать тем, на ком хочешь распознать тип урона(лучше всем сразу). Нет не надо... просто событие на отлов урона с проверкой что урон меньше 0 и сразу нанести такой же урон только больше 0( так как все заклинания с нанесением урона будут исцелять).
Проще говоря "браслеты", это как детект на то, что урон не может исцелять, а поскольку браслеты реагируют только на маг урон, соответсвенно любой "исцеляющий урон" и есть магическим.

23

» WarCraft 3 / удаление событий

Похожие вопросы:

ответ
надо периодически проверять, а не верить варкрафтовому событию. это одно из самых вредных событий в игре, его почти никто не использует в здравом уме
ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
наличия триггера на получение урона для каждого юнита
так делать нельзя
это же полный бред
просто добавляем событие к уже существующему триггеру вот и всё
нормального сборщика мусора в варе нет и скорее всего не будет(если близы даже рб поленились убрать то о нормальном gc можно забыть)
так же не стоит забывать что сборщик мусора срабатывает не сразу
если мне не изменяет память то save сохраняет объекты и значения переменных
а при загрузке восстанавливает связи (заносит значения в переменные, регистрирует события и прочее)
так что всякий мусор просто не проходит
а вообще лучше забей на это
в варе есть более серьёзные утечки от которых нельзя избавиться
например руны
+ создание и удаление триггеров вредит намного больше чем пара сотен килобайт памяти
да и вряд ли у тебя за игру будет 50к юнитов
ответ
вариант через define native-функции, то есть ее подмена для последующего отлова как события изменения реальной переменной, не совсем подходит
Даже интересно, почему?
Как уловить момент очищения handle боевой единицы?
Как вариант - периодическая проверка координат юнита по его хендлу, стали равны 0.0 / 0.0 - юнит был удалён.
Как уловить момент удаления через функцию RemoveUnit?
Вызвать нужную функцию сразу после вызова RemoveUnit, очевидно.
ответ
События триггера никак нельзя удалить, можно только удалить триггер (с кондишенами и акшенами).
А кстати вот - xgm.guru/p/wc3/venomanser
Будет несомненно полезно, как правильно удалять триггеры.
Да и вовсе полезно для общего развития.

23

» WarCraft 3 / Локальный тригер

Похожие вопросы:

ответ
Второй комп сломан поэтому проверить не могу, почему у меня подозрение, что оно должно работать....
Хотя могу и ошибаться, нормально делал карты года 2 назад.
ответ
скрин ошибки со строкой на которую ругается
а сори, плохо прочитал код
Tobi123 дело говорит
ты даже не знаешь что такое локальные переменные
короче в статьи и не вылазь от туда пока не узнаешь
ответ
Только с мемхаком, нужно подгрузить свою ддлку, которая грубо говоря от имени хоста сама хостанет следующую карту, пригласив всех игроков.
Но думаю это не так уж и просто реализуемо, а те функции что есть - только для одиночной кампании.
ответ
локальный - на машине конкретного юзера, не путать с mui/mpi (муи - действует для каждого юнита, mpi - для каждого игрока)
все баффы будут действовать, хоть их там будет штук 100 (хотя я столько еще не вешал)
тоже самое касается и тригго баффов, которые легко реализовать с помощью запрещенного спеллбука и как сказал quq_CCCP - таймера
даже если бафф не отображается, но его точно вешали на юнита - система его найдет
а если ты пытаешься сделать бафф Palus Knight из Lineage II - поиграйся с отрицательным по урону берсерком (где кстати есть и скорость бега), или со спеллом свитка скорости
хотя легче будет просто обложить юнита блокираторами прохода на время действия, потому что полную остановку сделать без костылей не удастся

23

» WarCraft 3 / Несколько интересующих вопросов

Похожие вопросы:

ответ
Отключить прочие способности - если этот параметр включен то при касте канала ты не можешь двигаться и юзать скилы.
Следовать в течении времени - точно не знаю,но предполагаю что это длительность приказа или длительность самой способности.
Тип цели - если "Цель - точка" ,то можно юзать куда угодно кроме юнитов. Если "Цель - юнит", тоже самое только на оборот.Если оба то можно кастовать и на юнита и на точку.Если"Нет цели", то способность активируется без наведения(как стомп например)
Параметры:
Изображение - отображение иконки скила
Изображение указателя - Если установить эту галку, то еще понадобится установить "Характеристики: Область воздействия" на не-нулевую величину. (например, 200). Когда вы будете прицеливаться заклинанием, на карте будет круг такого радиуса, которого вы установили(Вспомним свена из доты,круг радиуса есть,а юзать можно только на юнитов)
Материальное заклинание - при установленной галке "Изображение указателя цели" и области воздействия, равной 0, будет исчезать указатель цели, если не установлена эта галка
Универсальное заклинание - Если эта галка стоит, то заклинание будет действовать на существ, невосприимчивых к магии, если не стоит, то при касте на неуязвимого к магии юнита (например, голема) вы получите сообщение типа "Этот воин невосприимчив к магии"
Только ручное применение - Этот параметр определяет как будет использоватся заклинание если отдать приказ сразу группе юнитов с этой способностью. Если эта галка стоит, то способность использует только один из группы, если нет - то сразу вся группа.
ответ
Создаёшь массивы с координатами позиций, с типами юнитов, с самими юнитами. Если юнит из переменной помирает - создаёшь нового, заносишь в переменную вместо убитого и даёшь приказ двигаться в соответствующую точку.
ответ
  1. Ищите вопросы с GetLocalPlayer в названии.
  2. Ответ дали выше.

23

» WarCraft 3 / Получение предмета

Похожие вопросы:

ответ
Событие - получает прдмет
Условие - прдмет который надо
Действие - Создать юнит, либо замнетить(прверащение): так же вариант, когда подбирает нужный предмет, давать скил трансформа и приказать его заюать
ответ
Таурен Тауреныч, так ты ж его мгновенно удаляешь. Зачем добавлять и сразу убирать способность? Или удаляется предмет, а не скилл?
Попробуй удалять хотя бы через 0.00 сек.
Прочитал твой второй вопрос по этой теме. Всё-таки да, дело было в мгновенном удалении.
ответ
Мб твой герой не может использовать предметы?
Я сам лично сувал эту абилку в предметы и давать героям - всё работало.
И да, событие это работает. Возможно тоже допускаешь ошибки
И да, скорее всего не "подобранный предмет", а "предмет которым манипулируют".
ответ
Что мешает записывать предмет в массив, и каждые 20 сек проверять жив ли предмет, или его забрали. Если забрали, создать в нужных координатах новый...

23

» WarCraft 3 / Перезарядка предмета

Принятый ответ
Похожие вопросы:

ответ
В предмете ID кулдауна разный ставьте.
ответ
Характеристики - название.
Поставь так такую же способность, как и вшита в предмет. Тогда кд будет показываеться от выбранной способности.
ответ
Steal nerves:
Способности нужно дать юниту, и все. Если эффект временный, используем вэйт/wait (по-русски ждать) или таймеры, по истечении которого удаляем способность. Но вэйты не рекомендуются для использования.
xgm.guru/p/wc3/articles новичок, иди почитай
xgm.guru/p/wc3/needspells здесь не стол для заказов, хотя тема заброшена
xgm.guru/p/wc3/bpe где-то тут была похожее, только с баффами
можете конкретно написать, что вам нужно.
смотреть сюда
событие - юнит применяет способность
условие -применяемая способность == тип твоей способности
действие - добавить способность
ждать 15 сек.
действие - удалить способность
про локалки + таймер, хэш-таблицы
xgm.guru/p/wc3/jass_local_vars есть примерчик внизу, похожий на ваш
ответ
TeX13, можно, сделано в доте для варкравта...
Способов реализации много, от 'ANeg' (способность механика, Enginering Upgrade, рус-Техника), которым можно свапать скиллы, до таймеров которые будут удалять способность у героя а потом вручать ему снова, таким образом скидывая кулдаун, ну и так же хак на пямять, с помощью которого можно менять кулдаун как захочется, щяс все кому не лень юзают эту наработку.
ответ
Вроде активка должна стоять первой в списке способностей предмета.

23

» WarCraft 3 / Как циклом удалять точки

Похожие вопросы:

ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
ответ
Steal nerves:
Проблема в том, что, если в этой точке построено здание, то IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY) не помогает (это терраин проверяет, а вот то что там построено или нет ему пофиг). Посмотрел в триггерах, есть только текстуры земли - уберспласты (там эти текстурки для здания) - нет функции такой в библиотеке jngp для проверки точки. Пробовал через группу, но там своя заминка (походу выборка ловит тех юнитов, точки которых попали в выборку, а не на целиком. Точно не проверял, но не работает с группой),
Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще.
Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм

23

» WarCraft 3 / Как удалить переменную типа юнит?

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
ответ
Всё, разобрался, вопрос снимаю)

23

» WarCraft 3 / Как бы это сделать?

Похожие вопросы:

ответ
  1. Вместо (юнит триггера) вставишь своего героя. (Скрин внизу)
  2. Редактор обьектов ---> Способности ---> нейтрально-враждебные ---> герои ---> повышение характеристик (редактируешь или создаешь нестандартную и редактируешь под себя)
Скрин...
ответ
nvc123:
GRESHNIK1, я хз как ты пробовал
у меня всё работает нормально
плавающий юнит не может быть создан на суше
у тебя же корабль скорее всего не является плавающим т.е. не является кораблём
Делал из корабля из компании. Просьба залить пример, чтобы понять что я делаю не так.
ответ
WindMaster, проверяй, что количество жизней < 1, если 0 не работает. Можно было и самостоятельно догадаться, не бог весть какая наука.

Хотя периодическая проверка - априори костыль для такой задачи.
ответ
quq_CCCP, Уже решил, нужно создать любой ии в редакторе ии, и запустить его со стартом карты. Тогда юниты применяют абилки.
ответ
Закрыто.

23

» WarCraft 3 / Редактирование карты

Похожие вопросы:

ответ
Roy Mustang:
ну у тебя там почти 1000 юнитов. конечно будет лагать, незнаю попробуй откл список кистей.
Окно - > Список кистей
ответ
Trickster, Это защита, чтобы её снять нужны познания в устройстве формата карт.
А так подобная защита очень примитивна, открыть такую карту и восстановить все в ручную не сложно, но долговато...
ответ
~8gabriel8:
  1. Поставь после действия с созданием монстра Set Variable = (Last created unit), чтобы назначить ему переменную.

23

» WarCraft 3 / Туман войны

Похожие вопросы:

ответ
Пробовать не хочу, но предложу вот, что:
Если цель - защитить карту от подглядывания. То при старте игры или инициализации (если получится) можно запустить триггер с условием Вид: карта разведана is Set == да (процитировал текст условия из Гуи), действие - замкнутый цикл, или вызвать фатальную ошибку, вылет и т.д. Суть в том, что когда игрок запустит карту с такими параметрами, то тупо закрашить варик.
ответ
Eamon Flann:
Оказывается, отрицательную высоту для летающих зданий можно устанавливать, если поставить Art - Elevation - Sample Ponts: 0
SсRealm:
А еще можно повернуть нездание а том сделать зданием и поворот останется , правда в игре может сместитьтя внезапно))
А вместе с этим способом это, вроде бы как, решило мою проблему. Спасибо всем, кто попытался помочь :)
Melissa:
И ещё заметка - делать декорации юнитами - больная идея. Если их будет сотня другая - то ещё не конец света, но несколько сотен таких "декораций" - жди проседаний в производительности.
Да там и сотни не наберется, так что все нормально :)
ответ
Может, создать области по всей карте вокруг нужных областей и поставить видимость им?
ответ
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
	if bit!=0 then
		return flags/bit*0x80000000 != 0
	endif
	return false
endfunction

function RMem takes integer addr returns integer
	if addr<0 or addr>0x7FFFFFFF then
		return 0
	endif
	return Memory[addr/4]
endfunction

function AddAlwaysVisibleFlag takes unit u returns nothing
	local integer a=ConvertHandle(u)
	if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
		call WMem(a+0x20,RMem(a+0x20)+0x10)
	endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
ответ
pro100master:
Georgy12, call CreateFogModifierRectBJ( true, игрок, FOG_OF_WAR_VISIBLE, область)
call CreateFogModifierRectBJ( true, игрок, FOG_OF_WAR_VISIBLE, область) вот так
либо
local fogmodifier loc = CreateFogModifierRect(whichPlayer, whichFogState, r, true, false)
call FogModifierStart(loc)
ты установил Player(3) значит это 4 игрок а ты в тест карту запускает 1 игрок пойми!!!
чтобы все игроки видел облость надо циклом от 0 до 11
Понял в чем был косяк, ни одна из функций модификации видимости не имела эффекта, потому что перед ней был следующий вызов модификации тумана с параментром true:
CreateFogModifierRect(Player(i), FOG_OF_WAR_FOGGED, gg_rct_EntireMap, true, false);

23

» WarCraft 3 / Модели на заказ

Принятый ответ
Похожие вопросы:

ответ
Прятать юнита, создавать дамми с нужными способностями. Если никто не сделает, возможно вечером попытаюсь (сейчас у меня утро) сделать.
ответ
это Q/A
тут разрешены только вопросы
в следующий раз за заявки типа "сделайте мне что либо" пойдут варны

23

» WarCraft 3 / Модели на заказ

Похожие вопросы:

ответ
Прятать юнита, создавать дамми с нужными способностями. Если никто не сделает, возможно вечером попытаюсь (сейчас у меня утро) сделать.
ответ
это Q/A
тут разрешены только вопросы
в следующий раз за заявки типа "сделайте мне что либо" пойдут варны

23

» WarCraft 3 / Что означает ошибка?

Похожие вопросы:

ответ
Скорее всего просто наткнулись на фатальный баг, едва ли тут память причём-то. В мои старые карты например можно тоже фатальчик словить и необязательно после 2 часов игры) Посмотри файл ошибки в папке варика, если там часто повторяется что-нить типа A008 или U026 то дело в способности/улучшении/юните и вычислить причину легко, но не всегда ты увидишь в логе все улики...
ответ
JNGP добавляет в РО скрытые модельки/иконки, а FNWE заменяет файлы, где указаны имена этих файлов.
Перенеси этот файл в папку UI с заменой.
ответ
Вот оптимальные настройки, скорей всего в них ошибка.

23

» WarCraft 3 / Морф любого юнита

Похожие вопросы:

ответ
Impertus, не знаю точно как сработает с "Эликсиром ярости", но handleID при морфе Ворона не изменяется. Возможно, и с остальными морфами тоже. Обращайся к юниту через его ID. Как находить этот ID и что это такое можешь почитать ТУТ
ответ
Сохраняй и меняй через таймер с временем 0.00 сек.